package editorsvg.propiedades;

import editorsvg.gui.generico.DialogoAceptarCancelar;
import editorsvg.gui.generico.PanelEdicionLista;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JComponent;

/**
 * Propiedad que contiene una lista de objetos (se parsean como cadenas de texto).
 *
 * @author Jorge Berjano
 */
public class PropiedadLista extends Propiedad {
    
    //private Object[] valores; // No se pueden a�adir Objetos no serializables
    private JButton botonEdicion;
        
//    public PropiedadLista(String nombre, List valores) {
//        super(nombre);
//        asignarLista(valores);
//    }
        
     @Override
    public Class getClase() {
        return List.class;
    }
     
    public String toString() {
        List lista = obtenerLista();
        if (lista == null)
            return "";
        
        StringBuilder builder = new StringBuilder();
        for (Object valor : lista) {
            if (builder.length() > 0)
                builder.append(" ");
            builder.append(valor.toString());
        }
        return builder.toString();
    }  
   
    public List obtenerLista() {
        Object valor = getValor();
        if (valor instanceof List)
            return (List) valor; 
        return null;
    }

    public void asignarLista(List valores) {
        setValor(valores);
    }

    public JComponent obtenerComponenteModificacion() {
        if (botonEdicion == null) {
            botonEdicion = new JButton("...");
            botonEdicion.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evento) {
                    botonPulsado(evento);
                }
            });
        }
        return botonEdicion;
    }
       
    // Si se pulsa el bot�n se muestra dialogo para editar los elementos de la lista
    private void botonPulsado(ActionEvent evento) {
    DialogoAceptarCancelar dlg = new DialogoAceptarCancelar(null, getNombre());
        PanelEdicionLista panelEdicionLista = new PanelEdicionLista();
        panelEdicionLista.asignarListaValores(obtenerLista());
        dlg.setPanelInterior(panelEdicionLista);
        dlg.setVisible(true);
        if (dlg.getResultado() == DialogoAceptarCancelar.ACEPTAR) {
            asignarLista(panelEdicionLista.obtenerListaValores());
        }
    }
    
    public boolean permitirEditarTexto() {
        return false;
    }
    
    public boolean parsearPropiedad(String valorString) {
//        List valores = Arrays.asList(valorString.split("\t"));
//        asignarLista(valores);
//        return true;
        return false;
    }
    
//
//    public boolean parsearPropiedad(String valorString) {
//        asignarTexto(valorString);
//        return true;
//    }
    
}
